import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 * 任务二
 * 任务1完成的命令行工具MathExam，只能生成小学一年级的数学加减计算题，
 * 现在需要再增加新的功能：小学二年级的乘除运算
 * （1）输入：用命令行参数接收两个参数，第一个n，表示出n道题，第二个grade，表示年级（1或2）
 * （2）输出：把题目和标准答案写入out.txt文件
 * @author 王舒宇
 * @create 2018-10-06
 */
public class MathExam2014{
    public static void main(String[] args) {

        System.out.println("请输入:想要生成的题目数(1-100) 生成几年级的题目(1或2年级)");
        String args1=args[0];
        String args2=null;
        if(args.length>=2) {
            args2=args[1];
        }else{
            args2=1+"";
        }
        String input=args1+" "+args2;
        // 书写符合输入格式的正则表达式，过滤不符合格式的输入
        String regex="(([1-9]|[1-9][0-9]|100)( ?)(1?|2{1}))";
        int n;
        int grade;
        // 判断输入是否以空格结尾
        int flag=0;
        if(input.matches(regex)){
            //只输入题目数的情况,如:10
            for(int i=0;i<input.length();i++){
                if((input.substring(i,i+1)).equals(" ")){
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                n=Integer.valueOf(input);
                grade=1;
                operation(n, grade);
                return ;
            }
            // 输入为题目数+一个空格的情况,如:10+一个空格
            if(input.endsWith(" ")){
                n=Integer.valueOf(input.substring(0, input.length()-1));
                grade=1;
                operation(n, grade);
                return ;
            }else{
                // 输入符合格式，如:10 1或2时的情况
                String[] spiltArray=null;
                spiltArray=input.split(" ");
                n=Integer.valueOf(spiltArray[0]);
                grade=Integer.valueOf(spiltArray[1]);
                if(grade==1){
                    operation(n, grade);
                }else{
                    operation(n, grade);
                }
                return ;
            }
        }else{
            System.out.println("输入格式错误!"
                    + "请按照如下格式输入:\n想要生成的题目数(1-100)"+" "
                    + "生成几年级的题目(1或2年级)"
                    + "\n注:如果没有指定年级，则默认生成一年级数学的题目");
        }


        //operation(10,1);
    }


    public static void operation(int n,int m){
        File file = new File("out.txt");
        OutputStream out;
        try {
            out = new FileOutputStream(file);

            int[] an= new int[n];
            int bn[] = new int[n];
            String random = "";
            String[] Symbol1= {"+","-"};
            String[] Symbol2= {"*","/"};




            if(m==1) { //判断年级
                for(int i=0;i<n;i++) {
                    int index = (int)(Math.random()*(Symbol1.length));
                    random = Symbol1[index];   //随机调用Symbol1中的元素
                    if(random.equals("+")) {
                        int a = (int)(Math.random()*(50+1));//随机选择0~50之间的数
                        int b = (int)(Math.random()*(50+1));
                        System.out.printf("("+(i+1)+") "+a+" + "+b+" = "+"\n");
                        an[i]=a+b;
                        String output = "("+(i+1)+") "+a+" + "+b+" = "+"\n";
                        out.write(output.getBytes());

                    }

                    else{
                        int a = (int)(Math.random()*(100+1));
                        int b = (int)(Math.random()*a);
                        System.out.printf("("+(i+1)+") "+a+" - "+b+" = "+"\n");
                        an[i]=a-b;
                        String output = "("+(i+1)+") "+a+" - "+b+" = "+"\n";
                        out.write(output.getBytes());

                    }
                }
            }
            if(m==2) {
                for(int i=0;i<n;i++) {
                    int index = (int)(Math.random()*(Symbol2.length));
                    random = Symbol2[index];
                    if(random.equals("*")) {
                        int a = (int)(Math.random()*10);
                        int b = (int)(Math.random()*10);
                        System.out.printf("("+(i+1)+") "+a+" * "+b+" = "+"\n");
                        an[i]=a*b;
                        String output = "("+(i+1)+") "+a+" * "+b+" = "+"\n";
                        out.write(output.getBytes());

                    }
                    if(random.equals("/")) {
                        int a = (int)(Math.random()*(100+1));
                        int b = 1+(int)(Math.random()*9);
                        System.out.printf("("+(i+1)+") "+a+" / "+b+" = "+"\n");
                        an[i]=a/b;
                        bn[i]=a%b;
                        String output = "("+(i+1)+") "+a+" / "+b+" = "+"\n";
                        out.write(output.getBytes());
                    }
                }
            }

            //时间
            Date date = new Date();
            String time = "yyyy年MM月 dd日  HH:mm";
            SimpleDateFormat sdf = new SimpleDateFormat(time);
            String now = "\n" + "          201621162014   王舒宇    "+sdf.format(date)+"\n";
            out.write(now.getBytes());


            String flag = "\n";
            out.write(flag.getBytes());
            out.write("标准答案如下：\n\n".getBytes());
            //输入答案
            Scanner in = new Scanner(file);
            int j=0;
            while(in.hasNextLine()&&j!=n) {
                if(bn[j]==0) {
                    String s = in.nextLine()+an[j]+"\n";
                    out.write(s.getBytes());
                }
                else {
                    String s = in.nextLine()+an[j]+"..."+bn[j]+"\n";
                    out.write(s.getBytes());
                }
                j++;
            }

            out.close();
        } catch (IOException e) {
            System.out.println("输入参数不合法！");
        }
    }

}
